
#author='ACE_J'
#version=0.1
'我的爬虫，自动下载图片到本地'
import os
import re
import urllib.request
import socket
from bs4 import BeautifulSoup
 
#设置超时时间，单位秒
timeout = 3
socket.setdefaulttimeout(timeout)
 
#从主题列表页面提取标题和URL，返回一个字典
def get_urldict(url_str):
    html_str=urllib.request.urlopen(url_str).read().decode('gbk')#urlopen这个方法返回的是bytes对象，需要解码为str
    soup=BeautifulSoup(html_str,from_encoding='gbk')#传入一个字符串或者文件句柄初始化靓汤
    url_dict={}
    for tr in soup.find_all('tr'):#find_all方法返回一个迭代器
        if tr.h3!=None:
            url_dict[tr.h3.a.string]=tr.h3.a['href']
    return url_dict
 
#下载指定URL中的图片到指定路径，以帖子标题为文件夹名组织结构
def download_img(url_str,path_str):
    if not os.path.isdir(path_str):
        os.mkdir(path_str)
    html_str=urllib.request.urlopen(url_str).read().decode("gbk")
    soup=BeautifulSoup(html_str)
    div=soup.select('.tpc_content')#div是一个列表
    count=0
    for img in div[0].descendants:#取出列表中第一个div，也就是我们要的。descendants会返回这个div的所有子孙节点。
        if img.name=='input':#根据Tag的名称定位
            count+=1
            print('正在下载第%d张图片'%count)
            img_file=open(path_str+'/'+'%s.jpg'%count,'wb')
            headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
            req = urllib.request.Request(url=img['src'], headers=headers)#对于含有属性的Tag，采用字典方式访问属性
            img_bytes=urllib.request.urlopen(req).read()
            img_file.write(img_bytes)
            img_file.close()
    print('该主题下载完成')
 
url_str=r'http://*********'
path_str=r'E:/2/'
url_dict=get_urldict(url_str)
count=0
for title in url_dict.keys():
    count+=1
    print('开始下载第%d个主题'%count)
    download_img(r'http://**********/'+url_dict[title],path_str+title)
————————————————
版权声明：本文为CSDN博主「ACE_J」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/ACE_J/java/article/details/35450631